package com.alibaba.citrus.cr.sales.plan.repository;

import com.alibaba.citrus.cr.sales.plan.dto.api.request.PageQueryPlanCustomerStatRequest;
import com.alibaba.citrus.cr.sales.plan.dto.api.request.QueryPlanCustomerStatRequest;
import com.alibaba.citrus.cr.sales.plan.dto.api.response.SalesPlanScItemStatSubTotalResponse;
import com.alibaba.citrus.cr.sales.plan.dto.api.response.SalesPlanSubTotalResponse;
import com.alibaba.citrus.cr.sales.plan.repository.request.QueryPlanCustomerByAddressRequest;
import com.alibaba.citrus.cr.sales.plan.repository.request.SalesPlanStatCustomerSubTotalRepoRequest;
import com.alibaba.citrus.cr.sales.plan.sdo.SalesPlanStatCustomerSDO;
import com.alibaba.cz.base.tool.page.PageResult;

import java.util.List;

/**
 * @author yuhailin
 * @description:
 * @date 2021-09-27 10:42
 */
public interface SalesPlanCustomerStatRepository {
    /**
     * 创建计划客户
     *
     * @param salesPlanCustomerStatSDO
     * @return
     */
    String planCustomerSave(SalesPlanStatCustomerSDO salesPlanCustomerStatSDO);

    /**
     * 分页查询计划客户
     *
     * @param pageQueryPlanCustomerStatRequest
     * @return
     */
    PageResult<List<SalesPlanStatCustomerSDO>> pageQueryPlanCustomerList(PageQueryPlanCustomerStatRequest pageQueryPlanCustomerStatRequest);

    /**
     * 根据计划，客户，地址查询计划客户
     *
     * @param request
     * @return
     */
    SalesPlanStatCustomerSDO queryPlanCustomerByCustomerAddress(QueryPlanCustomerByAddressRequest request);

    /**
     * 更新计划客户
     *
     * @param salesPlanCustomerStatSDO
     * @return
     */
    Boolean updatePlanCustomer(SalesPlanStatCustomerSDO salesPlanCustomerStatSDO);

    /**
     * 批量保存计划客户
     *
     * @param salesPlanCustomerStatSDO
     * @return
     */
    boolean createPlanCustomer(SalesPlanStatCustomerSDO salesPlanCustomerStatSDO);

    /**
     * 批量保存计划客户
     *
     * @param request
     * @return
     */
    boolean batchCreatePlanCustomer(List<SalesPlanStatCustomerSDO> request);

    /**
     * 计划-客户维度-根据id查询计划客户
     *
     * @param queryPlanCustomerStatRequest
     * @return
     */
    SalesPlanStatCustomerSDO getSalesPlanCustomer(QueryPlanCustomerStatRequest queryPlanCustomerStatRequest);

    /**
     * 计划-客户维度-编辑计划客户
     *
     * @param salesPlanCustomerStatSDO
     * @return
     */
    Boolean editSalesPlanCustomer(SalesPlanStatCustomerSDO salesPlanCustomerStatSDO);

    /**
     * 删除计划客户汇总
     *
     * @param planId
     * @return
     */
    Boolean deletePlanCustomerByPlanId(String planId);

    /**
     * 月度计划客户小计
     * @param salesPlanStatCustomerSubTotalRequest
     * @return
     */
    SalesPlanSubTotalResponse subTotalSalesPlanStatCustomer(SalesPlanStatCustomerSubTotalRepoRequest salesPlanStatCustomerSubTotalRequest);

}
